package com.ysh.dao;

import com.ysh.domain.Student;
import com.ysh.utils.JDBCUtils;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

/*
    student操作数据库操作

 */
public class StudentDaoImpl implements StudentDao {
    private Connection con = null;
    private Statement state = null;
    private ResultSet rs = null;
    private String sql = null;
    /*
        查询所有学生信息
     */
    @Override
    public ArrayList<Student> findAll() {
        // 创建集合，存储Student对象
        ArrayList<Student> list = new ArrayList<>();
        try {

            con = JDBCUtils.getConnection();

            // 获取执行者对象
            state = con.createStatement();
            // 执行sql语句，并且接收返回的结果集
            sql = "SELECT * FROM student";
            rs = state.executeQuery(sql);
            // 处理结果集
            while (rs.next()) {
                int sid = rs.getInt("sid");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");
                // 封装成Student对象
                Student stu = new Student(sid, name, age, birthday);
                // 封装好的Student对象存入集合
                list.add(stu);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JDBCUtils.selectClose(con,state,rs);
        }
        // 返回list集合
        return list;
    }

    /*
        根据id查询学生信息
     */
    @Override
    public Student findById(Integer id) {
        // 创建集合，存储Student对象
        Student stu = new Student();
        // 连接对象

        try {

            con = JDBCUtils.getConnection();

            // 获取执行者对象
            state = con.createStatement();
            // 执行sql语句，并且接收返回的结果集
            String sql = "SELECT * FROM student WHERE sid='" + id + "'";
            rs = state.executeQuery(sql);
            // 处理结果集
            while (rs.next()) {
                /*int sid = rs.getInt("sid");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                Date birthday = rs.getDate("birthday");*/
                /*
                      也可以不用查询到的字段名称，用索引值
                 */
                int sid = rs.getInt(1);
                String name = rs.getString(2);
                int age = rs.getInt(3);
                Date birthday = rs.getDate(4);
                // 赋值
                stu.setSid(sid);
                stu.setName(name);
                stu.setAge(age);
                stu.setBirthday(birthday);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtils.selectClose(con,state,rs);
        }
        // 返回list集合
        return stu;
    }

    /*
        新增学生信息
     */
    @Override
    public int insert(Student stu) {
        // 返回结果
        int result = 0;

        try {

            con = JDBCUtils.getConnection();

            // 获取执行者对象
            state = con.createStatement();
            // 执行sql语句，并且接收返回的结果集
            // 处理日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(stu.getBirthday());
            String sql = "INSERT INTO student VALUES('"+stu.getSid()+
                    "','"+stu.getName()+
                    "','"+stu.getAge()+
                    "','"+birthday+
                    "')";
            result = state.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtils.close(con,state);
        }
        // 返回list集合
        return result;
    }

    /*
        修改学生信息
     */
    @Override
    public int update(Student stu) {
        // 返回结果变量
        int result = 0;

        try {

            con = JDBCUtils.getConnection();

            // 获取执行者对象
            state = con.createStatement();
            // 执行sql语句，并且接收返回的结果集
            // 处理日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String birthday = sdf.format(stu.getBirthday());
            // UPDATE student SET NAME='李思思',age=33,birthday='1980-05-10'WHERE sid=3;
            String sql = "UPDATE student SET " +
                    "NAME='"+stu.getName()+"'," +
                    "age='"+stu.getAge()+"'," +
                    "birthday='"+birthday+"' WHERE sid='"+stu.getSid()+"'";
            result = state.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtils.close(con,state);
        }
        // 返回list集合
        return result;
    }

    /*
        删除学生信息
     */
    @Override
    public int delete(Integer id) {
        // 返回结果
        int result = 0;

        try {
            con = JDBCUtils.getConnection();
            // 获取执行者对象
            state = con.createStatement();
            // 执行sql语句，并且接收返回的结果集
            // DELETE FROM 表名 [WHERE 条件];
            String sql = "DELETE FROM student WHERE sid='"+id+"'";
            result = state.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            // 释放资源
            JDBCUtils.close(con,state);
        }
        // 返回list集合
        return result;
    }
}
